package com.ideaaedi.commonspring.lite;

import com.ideaaedi.commonspring.lite.monitor.TimeWatcher;
import com.ideaaedi.commonspring.lite.params.ParameterRecorder;
import com.ideaaedi.commonspring.lite.ratelimiter.RateLimiterConfig;
import com.ideaaedi.commonspring.lite.register.FeatureRegistrarFace;
import org.springframework.context.annotation.Import;

import java.lang.annotation.*;

/**
 * 启用feature
 *
 * @author <font size = "20" color = "#3CAA3C"><a href="https://gitee.com/JustryDeng">JustryDeng</a></font> <img
 * src="https://gitee.com/JustryDeng/shared-files/raw/master/JustryDeng/avatar.jpg" />
 * @see FeatureRegistrarFace
 * @since 2100.7.3
 */
@Inherited
@Documented
@Import(FeatureRegistrarFace.class)
@Target(value = ElementType.TYPE)
@Retention(value = RetentionPolicy.RUNTIME)
public @interface EnableFeature {
    
    /**
     * 是否启用参数记录器(取第一个有效值作为启用配置)
     */
    ParameterRecorder[] enableParameterRecorder() default {};
    
    /**
     * 是否启用防重复aop功能支持
     */
    boolean enableAntiDuplicate() default false;
    
    /**
     * 是否启用分布式锁aop功能支持
     */
    boolean enableLockAnno() default false;
    
    /**
     * 是否启用对普通bean（即：非spring-bean）的autowired注入支持
     */
    boolean enableExtAutowiredInjector() default false;
    
    /**
     * 是否启用耗时记录器(取第一个有效值作为启用配置)
     */
    TimeWatcher[] enableTimeWatcher() default {};

    /**
     * 是否启用限流器aop功能支持(取第一个有效值作为启用配置)
     */
    RateLimiterConfig[] enableRateLimiter() default {};
    
}
